package rmi.atempt3;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.rmi.Naming;

/**
 * This class represents the object client for a distributed object of class
 * CallbackServerImpl, which implements the remote interface
 * CallbackServerInterface. It also accepts callback from the server.
 * 
 * 
 * 
 * @author M. L. Liu
 */

public class CallbackClient {

	public static void main(String args[]) {
		try {
			int RMIPort;
			String hostName;
			InputStreamReader is = new InputStreamReader(System.in);
			BufferedReader br = new BufferedReader(is);
			System.out.println("Enter the RMIRegistry host namer:");
			hostName = br.readLine();
			System.out.println("Enter the RMIregistry port number:");
			String portNum = br.readLine();
			RMIPort = Integer.parseInt(portNum);
			System.out.println("Enter how many seconds to stay registered:");
			String timeDuration = br.readLine();
			int time = Integer.parseInt(timeDuration);
			String registryURL = "rmi://" + hostName + ":" + RMIPort
					+ "/callback";
			// find the remote object and cast it to an
			// interface object
			CallbackServerInterface h = (CallbackServerInterface) Naming
					.lookup(registryURL);
			System.out.println("Lookup completed ");
			System.out.println("Server said " + h.sayHello());
			CallbackClientInterface callbackObj = new CallbackClientImpl();
			// register for callback
			h.registerForCallback(callbackObj);
			System.out.println("Registered for callback.");
			try {
				Thread.sleep(time * 1000);
			} catch (InterruptedException ex) { // sleep over
			}
			System.out.println("Try to Unregistered.");
			h.unregisterForCallback(callbackObj);
			System.out.println("Unregistered for callback.");
		} // end try
		catch (Exception e) {
			e.printStackTrace();
			System.out.println("Exception in CallbackClient: " + e);
		} // end catch
	} // end main
}// end class
